package com.hyz.yuaiagent.demo.invoke;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.hyz.yuaiagent.constants.TestAPIKey;

/**
 * 阿里云 零积 Ai Http 调用
 */
public class HttpAiInvoke {

    /**
     * 执行AI文本生成请求主方法
     *
     * @param args 命令行参数（未使用）
     *             <p>
     *             实现流程：
     *             1. 配置API认证信息
     *             2. 构建符合阿里云API规范的请求体
     *             3. 发送HTTP POST请求
     *             4. 处理并输出响应结果
     */
    public static void main(String[] args) {
        // API密钥配置（需替换为有效密钥）
        String apiKey = TestAPIKey.ApiKey;

        // 阿里云文本生成接口地址
        String url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";

        /* 构建多层级请求体结构：
           - model: 指定AI模型版本
           - input: 包含对话消息的上下文
           - parameters: 控制响应格式的参数 */
        JSONObject body = new JSONObject();
        body.put("model", "qwen-plus");

        // 构造对话消息容器（系统提示+用户输入）
        JSONObject input = new JSONObject();
        JSONArray messages = new JSONArray();

        // 系统角色消息（设定AI行为规范）
        JSONObject systemMsg = new JSONObject();
        systemMsg.put("role", "system");
        systemMsg.put("content", "You are a helpful assistant.");

        // 用户输入消息（示例问题）
        JSONObject userMsg = new JSONObject();
        userMsg.put("role", "user");
        userMsg.put("content", "你是谁？");

        messages.add(systemMsg);
        messages.add(userMsg);
        input.put("messages", messages);

        body.put("input", input);

        // 设置响应格式参数（返回完整消息结构）
        JSONObject parameters = new JSONObject();
        parameters.put("result_format", "message");
        body.put("parameters", parameters);

        /* 发送带认证的HTTP请求：
           - 携带Bearer Token认证头
           - 设置JSON内容类型
           - 配置30秒超时机制 */
        HttpResponse response = HttpRequest.post(url)
                .header("Authorization", "Bearer " + apiKey)
                .header("Content-Type", "application/json")
                .body(body.toString())
                .timeout(30000)
                .execute();

        // 输出HTTP状态码和响应体内容
        System.out.println(response.getStatus());
        System.out.println(response.body());
    }
}
